PKCS#11及CSP接口标准 | 您所在的位置:网站首页 › pkcs 11库失败 › PKCS#11及CSP接口标准 |
RSA非对称密码算法的三个创始人的姓的第一个字母联合起来就是RSA了,他们三个创建的公司的名字也就叫做RSA。在RSA有一个著名的公钥算法的实验室,这个实验室颁发的一系列行业标准就称作为PKCS标准,其中PKCS#11(简称P11)就是针对密码设备的接口指令标准。目前最新的版本应该是2.3了。 P11模型中重要的概念之一是slot,也称为槽。一个slot为一个密码设备对象。某个打开的slot会话称之为session。Session之间存在不同的验证权限。而同一个slot的不同的session之间存在操作的互相影响性,同时在某些状况下,权限会发生同步。另外一个重要的概念是对象。P11中支持几种重要的对象,如公钥、私钥、对称密钥,数据对象等。 PKCS#11创建和支持下列对象: 对象 说明 CKO_DATA 应用程序定义的对象。对象的数据结构可由应用程序任意定义,但是数据意义的解释由应用程序负责。 CKO_SECRET_KEY 对称加密算法使用的密钥。 CKO_CERTIFICATE X.509 CKO_PUBLIC_KEY RSA CKO_PRIVATE_KEY RSA CKO_MECHANISM 算法对象 PKCS#11的对象可根据其生命期长短的不同分成两大类:一类是持久存储的类对象,这类对象被保存在USB Key的安全存储区域当中,直到应用程序主动删除这些对象;另一类是会话对象,这类对象只存在于运行时建立的特定会话(Session对象)当中,一旦会话结束,这类对象也跟着被删除。决定对象生命期的模板属性是CKA_TOKEN,这是个布尔值,所有的对象都有这一属性。当该值为TRUE时,该对象将被保存到Key内的存储空间,否则,该对象保存在会话空间中,当会话结束后,该对象即销毁。 PKCS#11的对象除了生命期长短有分别之外,在访问权限上也有限制。所有的对象都可根据访问权限的不同分成两大类:一类是公开对象,这类对象是任何用户都可以访问的;另一类是私有对象,这一类对象只有身份被验证的用户才有权访问。决定对象的访问限制类型的模板属性是CKA_PRIVATE。这是个布尔值,所有的对象都有这一属性。应用程序可根据需要决定对象应为私有对象还是公开对象。 P11标准颁发了70余条指令。其中部分指令简介如下表: 接口类型 函数名称 描述 通用接口函数 C_Initialize 初始化 Cryptoki C_Finalize 整理各种适合 Cryptoki的资源 C_GetInfo 获得关于Cryptoki的通用信息 C_GetFunctionList 获得Cryptoki 库函数的进入点 槽和令牌管理函数 C_GetSlotList 获得系统中槽的名单 C_GetSlotInfo 获得关于特殊槽的信息 C_GetTokenInfo 获得关于特殊令牌的信息 C_WaitForSlotEvent 等待槽事件(令牌插入,转移等) 的发生 C_GetMechanismList 获得由令牌支持的机制的名单 C_GetMechanismInfo 获得关于特殊机制的信息 C_InitToken 初始化一个令牌 C_InitPIN 初始化普通用户的 PIN C_SetPIN 改变现在用户的PIN 会话管理函数 C_OpenSession 打开一个应用程序和特殊令牌之间的连接或安装一个应用程序呼叫返回令牌插入 C_CloseSession 关闭一个会话 C_CloseAllSessions 用令牌关闭所有的会话 C_GetSessionInfo 获得关于会话的信息 C_GetOperationState 获得会话的加密操作状态 C_SetOperationState 设置会话的加密操作状态 C_Login 注册一个令牌 C_Logout 从一个令牌注销 对象管理函数 C_CreateObject 建立一个对象 C_CopyObject 建立一个对象的拷贝 C_DestroyObject 销毁一个对象 C_GetObjectSize 获取字节中一个对象的大小 C_GetAttributeValue 获取一个对象的属性值 C_SetAttributeValue 改变一个对象的属性值 C_FindObjectsInit 初始化一个对象的搜索操作 C_FindObjects 继续一个对象搜索操作 C_FindObjectsFinal 完成一个对象搜索操作 加密函数 C_EncryptInit 初始化一个加密操作 C_Encrypt 加密单部分数据 C_EncryptUpdate 继续一个多部分加密操作 C_EncryptFinal 完成一个多部分加密操作 解密函数 C_DecryptInit 初始化一个解密操作 C_Decrypt 解密单部分加密数据 C_DecryptUpdate 继续一个多部分解密操作 C_DecryptFinal 完成一个多部分解密操作 消息解密函数 C_DigestInit 初始化一个消息摘要操作 C_Digest 摘要单部分数据 C_DigestUpdate 继续一个多部分摘要操作 C_DigestKey 摘要一个密钥 C_DigestFinal 完成一个多部分摘要操作 签名和消息鉴别函数 C_SignInit 初始化一个签名操作 C_Sign 签名单部分数据 C_SignUpdate 继续一个多部分签名操作 C_SignFinal 完成一个多部分签名操作 C_SignRecoverInit 初始化一个签名操作,在操作中数据能从签名中恢复 C_SignRecover 签名单部分数据,在操作中数据能从签名中恢复 签名鉴定消息鉴别函数 C_VerifyInit 初始化一个鉴定操作 C_Verify 在单部分数据上鉴定一个签名 C_VerifyUpdate 继续一个多部分鉴定操作 C_VerifyFinal 完成一个多部分鉴定操作 C_VerifyRecoverInit 初始化一个鉴定操作,在操作中数据能从签名中恢复 C_VerifyRecover 在单部分数据上鉴定一个签名,在操作中数据能从签名中恢复 双效加密函数 C_DigestEncryptUpdate 继续类似的多部分摘要和加密操作 C_DecryptDigestUpdate 继续类似的多部分解密和摘要操作 C_SignEncryptUpdate 继续类似的多部分签名和加密操作 C_DecryptVerifyUpdate 继续类似的多部分解密和鉴定操作 密钥管理函数 C_GenerateKey 产生一个保密密钥 C_GenerateKeyPair 产生一个公共/私钥对 C_WrapKey 加密一个密钥 C_UnwrapKey 解密一个密钥 C_DeriveKey 从基础密钥派生一个密钥 随机数生成函数 C_SeedRandom 把一个附加种子材料加入随机数字生成器 C_GenerateRandom 生成随机数 并行功能管理函数 C_GetFunctionStatus 已废弃函数,返回CKR_FUNCTION_NOT_PARALLEL C_CancelFunction 已废弃函数,返回CKR_FUNCTION_NOT_PARALLEL 3、CSP接口标准 CSP接口标准为微软所颁发,在windows操作系统上通行。CSP中重要的概念是容器(container)。一个容器中具有一对公私钥。而证书却是这一对密钥的附加属性了。 CSP总共有23个函数接口。简介如下: 接口类型 函数名称 描述 CSP连接函数 CPAcquireContext 为应用程序创建一个上下文 CPGetProvParam 返回CSP相关的信息 CPReleaseContext 释放CPAcquireContext创建的上下文 CPSetProvParam 设置CSP的参数操作 CSP密钥生成和交换函数 CPDeriveKey 从一个数据散列中生成一个会话密钥,它保证生成的密钥互不相同 CPDestroyKey 释放一个密钥句柄,释放后,句柄将无效,密钥将无法再被访问 CPExportKey 从CSP容器中导出密钥 CPGenKey 用来生成密钥或密钥对 CPGenRandom 使用随机数填充一个缓冲 CPGetKeyParam 用来得到加密操作密钥的属性 CPGetUserKey 用来获取CSP容器中的持久密钥对 CPImportKey 从一个blob中导入密钥到CSP容器中 CPSetKeyParam 设置密钥的属性 CSP加解密函数 CPDecrypt 用来解密先前被加密的数据 CPEncrypt 用来加密明文 CSP散列和数字签名函数 CPCreateHash 初始化并散列输入数据 CPDestroyHash 删除一个散列对象句柄 CPDuplicateHash 创建一个散列对象的拷贝 CPGetHashParam 获取散列对象的计算结果 CPHashData 散列输入的数据 CPSetHashParam 定制一个散列对象的属性 CPSignHash 签名一个散列对象 CPVerifySignature 校验一个数字签名 4、国密接口标准 国家密码管理局在2011年也制定了相关的接口标准,其标准在上层方面借鉴或参考了CSP接口,存在容器的概念,在底层操作上借鉴或参考了P11接口,有对象的标准,同时支持获取相关属性。具体国密局接口标准及其修订情况,请参考国家密码管理局网站 |
CopyRight 2018-2019 实验室设备网 版权所有 |